{"version":3,"file":"static/chunks/pages/[locale]/blogs/recipes/[slug]-0192e58490ddd9e7.js","mappings":"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","sources":["webpack://_N_E/?9885","webpack://_N_E/./components/layout/RecipeKioskLayout.tsx","webpack://_N_E/./hooks/useBreadcrumb.tsx","webpack://_N_E/./libs/contentful/ComponentMapping.ts","webpack://_N_E/./libs/contentful/components/CmsPage.tsx","webpack://_N_E/./components/recipes-detail/BackToRecipesButton.tsx","webpack://_N_E/./components/recipes-detail/CookingDirections.tsx","webpack://_N_E/./components/recipes-detail/Carousel.tsx","webpack://_N_E/./components/recipes-detail/Header.tsx","webpack://_N_E/./libs/commerce-tools/index.ts","webpack://_N_E/./utils/HomePageHelpers.ts","webpack://_N_E/./utils/recipesHelpers.ts","webpack://_N_E/./components/recipes-detail/IngredientItem.tsx","webpack://_N_E/./components/recipes-detail/NonWfIngredient.tsx","webpack://_N_E/./components/recipes-detail/NonWfIngredients.tsx","webpack://_N_E/./components/recipes-detail/IngredientList.tsx","webpack://_N_E/./components/recipes-detail/RecipesDetailLayout.tsx","webpack://_N_E/./pages/[locale]/blogs/recipes/[slug].tsx","webpack://_N_E/./components/layout/RecipeKioskLayout.module.scss","webpack://_N_E/./components/recipes-detail/RecipesDetail.module.scss"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/[locale]/blogs/recipes/[slug]\",\n function () {\n return require(\"private-next-pages/[locale]/blogs/recipes/[slug].tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/[locale]/blogs/recipes/[slug]\"])\n });\n }\n ","import { ReactNode } from \"react\";\nimport Image from \"@Components/Image\";\nimport LinkComponent from \"@Components/Link\";\nimport MetaHead from \"@Components/meta-head\";\nimport { titleTail } from \"@Constants/meta\";\nimport { KIOSK_VIEW_MODE_QUERY } from \"@Constants/url\";\nimport { useAppSelector } from \"@wff/store/hooks\";\nimport { localeSelector } from \"@wff/store/localeSlice\";\nimport classes from \"./RecipeKioskLayout.module.scss\";\n\ninterface IRecipeKioskLayout {\n pageModel?: any;\n mainClass?: string;\n pageTitle?: string;\n children?: ReactNode;\n pageDescription?: string;\n rightHeaderContent?: ReactNode;\n headTitleTail?: string; // pass empty string to remove the titleTail from the tag\n}\n\nexport function RecipeKioskLayout({\n children,\n pageModel,\n pageTitle = \"\",\n rightHeaderContent,\n pageDescription = \"\",\n headTitleTail = titleTail,\n mainClass = \"layout__main\",\n}: IRecipeKioskLayout) {\n const { languageCode } = useAppSelector(localeSelector);\n const siteLogoURL = pageModel?.siteGlobal?.header?.siteLogo?.url ?? \"\";\n const copyRightsContent =\n pageModel?.siteGlobal?.footer?.copyRightsContent ?? \"\";\n\n return (\n <>\n <MetaHead\n headTitle={pageTitle}\n headTitleTail={headTitleTail}\n headDescription={pageDescription}\n />\n\n <div className={classes.wrapper}>\n <header className={classes.header} id=\"site-header\">\n <LinkComponent\n href={`/${languageCode}/blogs/recipes/?viewMode=${KIOSK_VIEW_MODE_QUERY}`}\n >\n <a className={classes.logo}>\n <Image\n alt=\"Logo\"\n layout=\"fill\"\n src={`${siteLogoURL}?fm=webp&w=1920&h=1080`}\n objectFit=\"contain\"\n className={classes.logo}\n />\n </a>\n </LinkComponent>\n\n {rightHeaderContent}\n </header>\n\n <main className={mainClass}>{children}</main>\n\n <footer className={classes.footer}>\n <section className={classes.copyright}>{copyRightsContent}</section>\n </footer>\n </div>\n </>\n );\n}\n\nexport default RecipeKioskLayout;\n","import { useEffect } from \"react\";\nimport { BreadcrumbProps } from \"@Types/Breadcrumbs\";\nimport {\n setHomeSlug,\n setCollectionSlug,\n setCurrentSlug,\n} from \"@wff/store/breadcrumbsSlice\";\nimport { useAppDispatch } from \"@wff/store/hooks\";\n\nexport const useBreadcrumb = (props: BreadcrumbProps) => {\n // homeSlug: {title: \"title\", link:\"/\"} - (Set automatically in Contentful pages) - The First part of the slug, usually the Root.\n // collectionSlug: {title: \"title\", link:\"/\"} - (Needs to be set where the link is before user redirect) - The slug for the navigation category or product category (The collection where the link the user comes from is).\n // currentSlug: {title: \"title\", link:\"/\"} - (Needs to be set in the actual page) - The slug for the actual page where user is (The page the user is right now).\n\n const { homeSlug, collectionSlug, currentSlug } = props;\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n if (homeSlug) dispatch(setHomeSlug(homeSlug));\n if (collectionSlug) dispatch(setCollectionSlug(collectionSlug));\n if (currentSlug) dispatch(setCurrentSlug(currentSlug));\n }, [homeSlug, collectionSlug, currentSlug, dispatch]);\n};\n","import dynamic from \"next/dynamic\";\n\nexport type componentMappingTypes = {\n [Key in string]: Function;\n};\n\n/**\n * Map all the cms components here to dynamically display content from cms\n * In the JSON key must match with contentType.id from contentful cms\n */\nconst componentMapping: componentMappingTypes = {\n TextEditor: dynamic(\n () => import(\"@Libs/contentful/components/cms-text-editor/CmsTextEditor\")\n ),\n Banner: dynamic(\n () => import(\"@Components/contentful-components/banner/Banner\")\n ),\n HomePageHeroSlider: dynamic(\n () =>\n import(\n \"@Components/contentful-components/heroSlider/custom/HomePageHeroSlider\"\n )\n ),\n HeroSlider: dynamic(\n () => import(\"@Components/contentful-components/heroSlider/HeroSlider\")\n ),\n UserFeedback: dynamic(\n () => import(\"@Components/contentful-components/user-feedback/UserFeedBack\")\n ),\n UserReviews: dynamic(\n () => import(\"@Components/contentful-components/user-reviews/UserReviews\")\n ),\n SalesPropositions: dynamic(\n () =>\n import(\n \"@Components/contentful-components/uniqueSalesPropositions/UniqueSalesPropositions\"\n )\n ),\n CarouselProductList: dynamic(\n () =>\n import(\"@Components/contentful-components/promo-carousel/PromoCarousel\")\n ),\n Educational: dynamic(\n () => import(\"@Components/contentful-components/educational/Educational\")\n ),\n KnowYourCuts: dynamic(\n () =>\n import(\"@Components/contentful-components/know-your-cuts/KnowYourCuts\")\n ),\n StoriesOfWildfork: dynamic(\n () => import(\"@Components/storiesOfWildfork/StoriesOfWildfork\")\n ),\n MediaImage: dynamic(\n () => import(\"@Components/contentful-components/media-image/MediaImage\")\n ),\n\n RichTextContent: dynamic(\n () => import(\"@Components/contentful-components/rich-text/RichTextContent\")\n ),\n\n MembershipTable: dynamic(\n () =>\n import(\n \"@Components/contentful-components/membership-table/MembershipTable\"\n )\n ),\n\n MediaEmbedYoutubeVideo: dynamic(\n () =>\n import(\n \"@Components/contentful-components/media-embed-youtube-video/MediaEmbedYoutubeVideo\"\n )\n ),\n\n SectionTitleIconDescription: dynamic(\n () =>\n import(\n \"@Components/contentful-components/section-title-icon-description/SectionTitleIconDescription\"\n )\n ),\n\n SectionTextImage: dynamic(\n () =>\n import(\n \"@Components/contentful-components/section-text-image/SectionTextImage\"\n )\n ),\n\n SectionDivider: dynamic(\n () =>\n import(\"@Components/contentful-components/section-divider/SectionDivider\")\n ),\n};\n\nexport default componentMapping;\n","import logger from \"@Utils/Logger\";\nimport AppLayout from \"@wff/components/layout/AppLayout\";\nimport { useBreadcrumb } from \"@wff/hooks/useBreadcrumb\";\nimport componentMapping from \"../ComponentMapping\";\nimport { getCmsPageBySlug } from \"../Contentful.helper\";\n\ninterface cmsPageProps {\n children?: React.ReactNode;\n pageModel: any;\n pageTitle?: string;\n productSKU?: string;\n pageDescription?: string;\n}\n\ninterface pageModelTypes {\n locale?: string;\n slug?: string;\n productId?: string;\n resourceName?: string;\n}\n\ninterface getCMSPageModelOptions {\n keepOriginalSlug?: boolean;\n}\n\n/**\n * Component - CMS Page\n * @returns\n */\nconst CmsPage = (props: cmsPageProps) => {\n const {\n pageModel,\n pageTitle = \"\",\n productSKU,\n pageDescription = \"\",\n children,\n } = props;\n const contents = pageModel?.pageContent?.templates?.items ?? [];\n\n let templates;\n if (contents.length > 0) {\n let Comp;\n templates = contents.map((content: any, index: number) => {\n const contentKey = content?.content_type;\n // eslint-disable-next-line security/detect-object-injection\n Comp = componentMapping[contentKey];\n if (Comp) {\n return <Comp key={`${contentKey}_${index}`} {...content}></Comp>;\n } else {\n return null;\n }\n });\n }\n // set the Root label for Breadcrumbs in all pages\n useBreadcrumb({\n homeSlug: {\n title: pageModel?.siteGlobal?.homeSlugLabel\n ? pageModel?.siteGlobal?.homeSlugLabel\n : \"Home\",\n link: \"/\",\n },\n });\n\n return (\n <>\n <AppLayout\n pageTitle={pageTitle}\n productSKU={productSKU}\n pageDescription={pageDescription}\n pageModel={pageModel}\n >\n {templates}\n {children}\n </AppLayout>\n </>\n );\n};\n\nexport const getCMSPageModel = async (\n query: string,\n payload: pageModelTypes,\n options?: getCMSPageModelOptions\n) => {\n const { locale = \"en-US\", slug } = payload;\n const { keepOriginalSlug = false } = options || {};\n let slugStr = slug;\n\n const country = (locale.split(\"-\")?.[1] ?? \"us\").toLocaleLowerCase();\n\n if (slug && !keepOriginalSlug) {\n slugStr = `wildfork-${country}-${slug}`;\n }\n\n const reqPayload = {\n ...payload,\n slug: slugStr,\n country,\n };\n\n logger.info(\"CmsPage.tsx getCMSPageModel()\", payload);\n\n return await getCmsPageBySlug(query, reqPayload);\n};\n\nexport default CmsPage;\n","import { useRouter } from \"next/router\";\nimport LinkComponent from \"@Components/Link\";\nimport Icon from \"@Components/ui/icon\";\nimport { KIOSK_VIEW_MODE_QUERY } from \"@Constants/url\";\nimport { useAppSelector } from \"@wff/store/hooks\";\nimport { localeSelector } from \"@wff/store/localeSlice\";\n\nimport classes from \"./RecipesDetail.module.scss\";\n\nexport const BackToRecipesButton = ({}) => {\n const {\n query: { viewMode },\n } = useRouter();\n const { languageCode } = useAppSelector(localeSelector);\n const backLink = `/${languageCode}/blogs/recipes/${\n viewMode === KIOSK_VIEW_MODE_QUERY\n ? `?viewMode=${KIOSK_VIEW_MODE_QUERY}`\n : \"\"\n }`;\n\n return (\n <LinkComponent href={backLink}>\n <button className={classes.backButton}>\n <Icon iconName=\"arrow-left\" className={classes.arrowLeftIcon} />\n Back To Recipes\n </button>\n </LinkComponent>\n );\n};\n","import clsx from \"clsx\";\nimport { BLOCKS } from \"@contentful/rich-text-types\";\nimport { useRouter } from \"next/router\";\nimport Icon from \"@Components/ui/icon\";\nimport { KIOSK_VIEW_MODE_QUERY } from \"@Constants/url\";\nimport CmsTextEditorContent from \"@Libs/contentful/components/cms-text-editor/CmsTextEditor\";\nimport { ICookingDirectionsContent } from \"@Types/recipes-detail-page\";\nimport classes from \"./RecipesDetail.module.scss\";\n\ninterface CookingDirectionsProps extends ICookingDirectionsContent {}\n\nexport const CookingDirections = (props: CookingDirectionsProps) => {\n const renderingOptions = {\n renderNode: {\n [BLOCKS.LIST_ITEM]: (_node: any, children: string) => {\n return <DirectionItem>{children}</DirectionItem>;\n },\n },\n };\n\n return (\n <div className={classes[\"cooking-directions\"]}>\n <h2>{props[\"recipe.page.cookingDirections\"]}</h2>\n <CmsTextEditorContent\n content={props.cookingdirections}\n options={{\n ...renderingOptions,\n }}\n />\n </div>\n );\n};\n\ninterface DirectionItemProps {\n children?: React.ReactNode;\n}\n\nconst DirectionItem = (props: DirectionItemProps) => {\n const {\n query: { viewMode },\n } = useRouter();\n\n return (\n <li\n className={clsx(\n classes[\"direction-item\"],\n viewMode === KIOSK_VIEW_MODE_QUERY && classes.kiosk\n )}\n >\n <div className={classes[\"question-bullet\"]}>\n <Icon iconName=\"question-bullet\" />\n </div>\n {props.children}\n </li>\n );\n};\n","import clsx from \"clsx\";\nimport { useRef } from \"react\";\nimport { Slide } from \"react-slideshow-image\";\nimport Image from \"@Components/Image\";\nimport { CMSImageType } from \"../../types/Contentful\";\nimport classes from \"./RecipesDetail.module.scss\";\nimport \"react-slideshow-image/dist/styles.css\";\n\ninterface Props {\n imageList: CMSImageType[];\n}\n\nexport const Carousel = ({ imageList }: Props) => {\n const carouselRef = useRef<Slide>(null);\n\n if (!imageList?.length) return null;\n\n const indicators = (index: number) => {\n const activeIndex = carouselRef.current?.state?.index || 0;\n\n return (\n <div\n className={clsx(\n classes[\"indicator\"],\n \"indicator\",\n activeIndex === index && classes[\"active\"]\n )}\n />\n );\n };\n\n return (\n <Slide\n autoplay={false}\n arrows={imageList.length > 1}\n indicators={imageList.length > 1 ? indicators : null}\n ref={carouselRef}\n transitionDuration={200}\n >\n {imageList.map((image, index) => (\n <div className=\"each-slide\" key={index}>\n <div className={classes[\"image\"]}>\n <Image\n width=\"100%\"\n height=\"100%\"\n layout=\"responsive\"\n objectFit=\"cover\"\n src={`${image?.url}?fm=webp&w=1680&h=1680`}\n alt=\"Recipe\"\n />\n </div>\n </div>\n ))}\n </Slide>\n );\n};\n","import { QRCodeSVG } from \"qrcode.react\";\nimport { useRouter } from \"next/router\";\nimport Icon from \"@Components/ui/icon\";\nimport { KIOSK_VIEW_MODE_QUERY } from \"@Constants/url\";\nimport CmsTextEditorContent from \"@Libs/contentful/components/cms-text-editor/CmsTextEditor\";\nimport { IHeader } from \"@Types/recipes-detail-page\";\nimport { whereAmI } from \"@Utils/whereAmI\";\nimport { Carousel } from \"./Carousel\";\nimport classes from \"./RecipesDetail.module.scss\";\nimport \"react-slideshow-image/dist/styles.css\";\n\ninterface HeaderProps extends IHeader {}\n\nexport const Header = (props: HeaderProps) => {\n const {\n query: { viewMode },\n } = useRouter();\n const [linkWithoutViewModeQuery] = whereAmI().split(\"?viewMode\");\n\n const imageList = props.imageList?.items || props.recipeBanner || [];\n\n return (\n <div className={classes[\"main-content\"]}>\n <div className={classes[\"main-content__header\"]}>\n <h1>\n <span>{props[\"recipe.page.title\"]}</span>\n {props.title}\n </h1>\n\n <ul className={classes[\"list\"]}>\n <li>\n <Icon className={classes[\"icon\"]} iconName=\"clock\" />\n {props[\"recipe.page.prepTime\"]} {props.prepTime}\n </li>\n <li>\n <Icon className={classes[\"icon\"]} iconName=\"clock\" />\n {props[\"recipe.page.cookTime\"]} {props.cookTime}\n </li>\n </ul>\n\n {viewMode === KIOSK_VIEW_MODE_QUERY && (\n <QRCodeSVG value={linkWithoutViewModeQuery} />\n )}\n\n <CmsTextEditorContent content={props.description} />\n </div>\n <div className={classes[\"main-content__gallery\"]}>\n <Carousel imageList={imageList} />\n </div>\n </div>\n );\n};\n","import { createApiBuilderFromCtpClient } from \"@commercetools/platform-sdk\";\nimport {\n ClientBuilder,\n AuthMiddlewareOptions,\n HttpMiddlewareOptions,\n} from \"@commercetools/sdk-client-v2\";\nimport { nextAppEnv } from \"@Utils/environment\";\n\nconst projectKey = nextAppEnv.commerceTools.authProjectKey;\nconst scopes = nextAppEnv.commerceTools.authScopes?.split(\" \");\n\n// create the authMiddlewareOptions object\nconst authMiddlewareOptions: AuthMiddlewareOptions = {\n host: nextAppEnv.commerceTools.authUrl,\n projectKey: projectKey,\n credentials: {\n clientId: nextAppEnv.commerceTools.authClientId,\n clientSecret: nextAppEnv.commerceTools.authClientSecret,\n },\n scopes,\n fetch,\n};\n\n// create the httpMiddlewareOptions object also\nconst httpMiddlewareOptions: HttpMiddlewareOptions = {\n host: nextAppEnv.commerceTools.baseUrl,\n fetch,\n};\n\nconst ctpClient = new ClientBuilder()\n .withProjectKey(projectKey) // not necessary if the projectKey was already passed in the authMiddlewareOptions\n .withClientCredentialsFlow(authMiddlewareOptions)\n .withHttpMiddleware(httpMiddlewareOptions)\n .build();\n\nconst apiRoot = createApiBuilderFromCtpClient(ctpClient);\nexport const callCTP = apiRoot.withProjectKey({ projectKey: projectKey });\n","//es-lint-disable-next-line\nimport { ClientResponse } from \"@commercetools/platform-sdk\";\nimport { CT_PRODUCT_LIMIT } from \"@Components/products-listing/constants\";\nimport { ITooltipData } from \"@Types/Contentful\";\nimport { callCTP } from \"@wff/libs/commerce-tools\";\n\ninterface HomePropsTypes {\n pageModel: any;\n}\n\n// Get data from Commercetools for the listed items\nexport const getCtData = async (sku: string) => {\n try {\n const res = await callCTP\n .products()\n .get({\n queryArgs: {\n localeProjection: \"en-US\", // do not change, all data is handled from en-US projection\n where: `masterData(current(masterVariant(sku=\"${sku}\") or variants(sku=\"${sku}\")))`,\n expand: [\"productType\"],\n },\n })\n .execute();\n return res?.body.results[0];\n } catch (e) {\n return null;\n }\n};\n\n/**\n * Fix: CE:357\n * Get all products from CT in recursive manner\n * @param offset\n * @returns\n */\nexport const getCtAllProducts = async (\n offset = 0\n): Promise<ClientResponse | null> => {\n try {\n const response = await callCTP\n .products()\n .get({\n queryArgs: {\n limit: CT_PRODUCT_LIMIT,\n offset,\n where: \"masterData(published=true)\",\n localeProjection: \"en-US\", // do not change, all data is handled from en-US projection\n expand: [\"productType\"],\n },\n })\n .execute();\n\n const products = response.body?.results ? response.body.results : [];\n\n if (response?.body?.count && offset < response?.body?.count) {\n const nextProducts = await getCtAllProducts(offset + CT_PRODUCT_LIMIT);\n products.push(...(nextProducts?.body?.results ?? []));\n }\n\n return {\n ...response,\n body: {\n ...response.body,\n results: products,\n },\n };\n } catch (e) {\n return null;\n }\n};\n\nexport const getCtDataBySlug = async (slug: string, lang: string) => {\n try {\n return await callCTP\n .products()\n .get({\n queryArgs: {\n localeProjection: \"en-US\", // do not change, all data is handled from en-US projection\n where: `masterData(current(slug(${lang}=\"${slug}\")))`,\n expand: [\"productType\"],\n },\n })\n .execute();\n } catch (e) {\n return null;\n }\n};\n\nexport const updateSingleItems = async (\n itemsArr: any,\n tooltipData: ITooltipData\n) => {\n const tempArr = [...itemsArr];\n for (let j = 0; j < tempArr.length; j++) {\n const sku = tempArr?.[j]?.ctproductSku;\n if (sku) {\n tempArr[j] = {\n ...tempArr[j],\n ctData: (await getCtData(sku)) ?? null,\n tooltipData: tooltipData,\n };\n }\n }\n return tempArr;\n};\n\nexport const updatePageModel = (\n initialPageModel: HomePropsTypes[\"pageModel\"]\n) => {\n // find all instances with a CarouselProductList component to update the props adding a param\n // to pageModel\n\n const tempPM = { ...initialPageModel };\n const templates = tempPM?.pageContent?.templates?.items || [];\n const tooltipData = {\n title: tempPM?.pageContent?.[\"products.tooltip.title\"]\n ? tempPM?.pageContent?.[\"products.tooltip.title\"]\n : \"\",\n description: tempPM?.pageContent?.[\"products.tooltip.description\"]\n ? tempPM?.pageContent?.[\"products.tooltip.description\"]\n : \"\",\n example: tempPM?.pageContent?.[\"products.tooltip.example\"]\n ? tempPM?.pageContent?.[\"products.tooltip.example\"]\n : \"\",\n };\n if (\n templates?.find((el: any) => el?.content_type === \"CarouselProductList\")\n ) {\n // add the corresponding Commercetools info to each product.\n\n const updateAllItems = async (arr: any, tooltipData: ITooltipData) => {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i]?.content_type === \"CarouselProductList\") {\n const itemsArr = await updateSingleItems(\n [...(arr[i]?.carouselProductItems?.items ?? [])],\n tooltipData\n );\n\n arr[i] = {\n ...templates?.[i],\n carouselProductItems: {\n ...templates?.[i]?.carouselProductItems,\n items: [...itemsArr] ?? [],\n },\n };\n }\n }\n\n return arr;\n };\n\n return updateAllItems(templates, tooltipData);\n }\n return templates;\n};\n","import { IngredientsListItem } from \"@Types/recipes-detail-page\";\nimport { getCtData } from \"./HomePageHelpers\";\n\ninterface IngredientItemProps extends IngredientsListItem {\n addToBasketText: string;\n}\n\nconst getItemData = async (ctProductSku: string) =>\n await getCtData(ctProductSku);\nexport const recipeItemToCTItemTransformer = async (\n product: IngredientItemProps\n) => {\n const { isWfProduct, ctProductSku } = product;\n if (!isWfProduct || !ctProductSku) return;\n const ctData = getItemData(ctProductSku);\n return await ctData;\n};\n","import clsx from \"clsx\";\nimport { useState, useEffect } from \"react\";\nimport ReactTooltip from \"react-tooltip\";\nimport { Product } from \"@commercetools/platform-sdk\";\nimport { useRouter } from \"next/router\";\nimport LinkComponent from \"@Components/Link\";\nimport {\n getItemQty,\n getPriceOrDiscounted,\n getWeightValue,\n} from \"@Components/cart/helpers/helpers\";\nimport { Button } from \"@Components/ui\";\nimport { TIME_TO_REDIRECT_BACK_FROM_PDP_TO_PLP_RECIPES } from \"@Constants/common\";\nimport { STORAGE_KEYS, STORAGE_TYPES } from \"@Constants/storage\";\nimport { KIOSK_VIEW_MODE_QUERY } from \"@Constants/url\";\nimport { IngredientsListItem } from \"@Types/recipes-detail-page\";\nimport { setItem } from \"@Utils/browserStorage\";\nimport { cartUtilQtyAdd, cartUtilRemoveItem } from \"@Utils/cartUtils\";\nimport { currency } from \"@Utils/index\";\nimport { recipeItemToCTItemTransformer } from \"@Utils/recipesHelpers\";\nimport { ICartLineItem } from \"@wff/interfaces\";\nimport { cartSliceSelector } from \"@wff/store/cartSlice\";\nimport { useAppDispatch, useAppSelector } from \"@wff/store/hooks\";\nimport { localeSelector } from \"@wff/store/localeSlice\";\nimport { toggleZipCodePopUp } from \"@wff/store/zipcodeSlice\";\nimport classes from \"./RecipesDetail.module.scss\";\n\ninterface IngredientItemProps extends IngredientsListItem {\n addToBasketText: string;\n addedText: string;\n removeInCartText: string;\n removedText: string;\n isCanadianUser?: boolean;\n addToCartButtonClassForCA?: string;\n availability?: boolean;\n isPickupAvailable?: boolean;\n currentZipCodeAvialabilityStoreIdInStorageForCA?: string;\n currentZipCodePickupAvailabilityForCA?: string;\n}\n\ninterface IngredientState extends IngredientItemProps {\n ctData: Product | null | undefined;\n}\ninterface WithLink {\n link?: string;\n className?: string;\n children: JSX.Element;\n}\n\nconst WithLink = ({ link, children, className = \"\" }: WithLink) =>\n link ? (\n <LinkComponent href={link}>\n <a className={className}>{children}</a>\n </LinkComponent>\n ) : (\n children\n );\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nconst IngredientItem = (props: IngredientItemProps) => {\n const {\n query: { viewMode },\n } = useRouter();\n const [ingredient, setIngredient] = useState<IngredientState>();\n const link = props.isWfProduct ? props.ctProductSku : \"\";\n const { lineItems, cartId } = useAppSelector(cartSliceSelector);\n const currentLocale = useAppSelector(localeSelector)?.languageCode;\n const lang = currentLocale ?? \"en-US\";\n const itemIndex = lineItems?.findIndex(\n (item: ICartLineItem) => item.sku === props.ctProductSku\n );\n const [itemQuantity, setItemQuantity] = useState(\n getItemQty(lineItems, itemIndex)\n );\n const [isInCart, setIsInCart] = useState(false);\n const [slug, setSlug] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const [isEventTriggered, setIsEventTriggered] = useState(false);\n const dispatch = useAppDispatch();\n const attribs =\n ingredient?.ctData?.masterData?.current?.masterVariant?.attributes ?? [];\n const priceData =\n ingredient?.ctData?.masterData?.current?.masterVariant?.prices;\n const weight = getWeightValue(attribs);\n const totalPrice = currency.format(getPriceOrDiscounted(priceData));\n const sku = props.ctProductSku ? props.ctProductSku : \"\";\n const removeInCartTextWithQuantity = props.removeInCartText\n .split(\"#\")\n .join(`${itemQuantity}`);\n const handleRemoveItemPayload = {\n lineItems: lineItems,\n sku: sku,\n dispatch: dispatch,\n };\n const {\n isCanadianUser,\n currentZipCodeAvialabilityStoreIdInStorageForCA,\n addToCartButtonClassForCA,\n availability,\n isPickupAvailable,\n currentZipCodePickupAvailabilityForCA,\n } = props;\n\n const incrementalQtyPayload = {\n itemIndex: itemIndex,\n itemQuantity: itemQuantity,\n availability: 999,\n sku: sku,\n callback: () => {\n setItemQuantity(1);\n setIsLoading(false);\n },\n dispatch: dispatch,\n };\n const tooltipPosition = props.title.length * -3.5;\n const itemInCartClass = isInCart ? classes[\"is_in_cart\"] : \"\";\n const dynamicBtnClass = isInCart ? classes[\"is_in_cart_btn\"] : \"\";\n const isKioskViewMode = viewMode === KIOSK_VIEW_MODE_QUERY;\n const router = useRouter();\n useEffect(() => {\n if (ingredient?.ctData) return;\n const getData = async (props: IngredientItemProps) => {\n return await recipeItemToCTItemTransformer(props).then((res) => {\n setIngredient({ ...props, ctData: res }),\n setSlug(\n res?.masterData?.current?.slug[lang]\n ? res?.masterData?.current?.slug[lang]\n : \"#\"\n );\n });\n };\n\n getData(props);\n }, [props, lang, ingredient?.ctData]);\n\n useEffect(() => {\n const newQty = getItemQty(lineItems, itemIndex);\n if (newQty && newQty > 0) {\n setIsInCart(true);\n setItemQuantity(newQty);\n } else {\n setIsInCart(false);\n setIsLoading(false);\n }\n }, [lineItems, itemIndex]);\n\n const handleAddToCart = () => {\n ReactTooltip.hide();\n setIsLoading(true);\n if (!isCanadianUser) {\n cartUtilQtyAdd(cartId, incrementalQtyPayload);\n } else {\n if (\n (currentZipCodeAvialabilityStoreIdInStorageForCA?.length === 0 &&\n currentZipCodePickupAvailabilityForCA?.length === 0) ||\n (!availability && !isPickupAvailable) ||\n (currentZipCodeAvialabilityStoreIdInStorageForCA === \"false\" &&\n currentZipCodePickupAvailabilityForCA === \"false\")\n ) {\n setItem(\n STORAGE_KEYS.INCREMENT_PAYLOAD_CA,\n JSON.stringify(incrementalQtyPayload),\n STORAGE_TYPES.LOCAL\n );\n dispatch(toggleZipCodePopUp());\n } else {\n cartUtilQtyAdd(cartId, incrementalQtyPayload);\n }\n }\n };\n\n useEffect(() => {\n document?.addEventListener(\"touchstart\", () => setIsEventTriggered(true));\n document?.addEventListener(\"touchend\", () => setIsEventTriggered(false));\n\n let timeoutId: NodeJS.Timeout;\n if (!isEventTriggered && isCanadianUser && isKioskViewMode) {\n timeoutId = setTimeout(() => {\n router?.back();\n }, TIME_TO_REDIRECT_BACK_FROM_PDP_TO_PLP_RECIPES);\n }\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n document.removeEventListener(\"touchstart\", () =>\n setIsEventTriggered(false)\n );\n document.removeEventListener(\"touchend\", () =>\n setIsEventTriggered(false)\n );\n };\n }, [isEventTriggered, isCanadianUser, isKioskViewMode, router]);\n\n return (\n <li\n className={clsx(\n classes[\"ingredient-item\"],\n isKioskViewMode && classes.kiosk\n )}\n >\n <WithLink\n link={isKioskViewMode ? undefined : `/${lang}/products/${slug}`}\n >\n <>\n <p className={itemInCartClass}>{props.title}</p>\n <p className={itemInCartClass}>{props.ingredientQuantity}</p>\n </>\n </WithLink>\n\n <div className={classes[\"button-wrapper\"]}>\n {link && !isInCart && (\n <>\n {!isKioskViewMode && (\n <Button\n className={\n !isCanadianUser ? dynamicBtnClass : addToCartButtonClassForCA\n }\n data-tip\n data-for={`registerTip-${props.title}`}\n disabled={!isCanadianUser ? isLoading : false}\n onClick={handleAddToCart}\n >\n {isLoading ? props.addedText : props.addToBasketText}\n </Button>\n )}\n\n <ReactTooltip\n key={props.title}\n className={classes[\"tooltip\"]}\n id={`registerTip-${props.title}`}\n place=\"top\"\n type=\"dark\"\n effect=\"solid\"\n offset={{ top: 0, left: tooltipPosition }}\n arrowColor=\"#3d3933\"\n >\n {`${props.title} - ${weight} • ${totalPrice}`}\n </ReactTooltip>\n </>\n )}\n\n {isInCart && (\n <>\n <Button\n className={dynamicBtnClass}\n data-tip\n data-for={`registerTip-${props.title}`}\n onClick={() => {\n setIsLoading(true);\n cartUtilRemoveItem(handleRemoveItemPayload);\n setIsEventTriggered(true);\n }}\n disabled={!isCanadianUser ? isLoading : false}\n >\n {isLoading ? props.removedText : removeInCartTextWithQuantity}\n </Button>\n </>\n )}\n </div>\n </li>\n );\n};\n\nexport default IngredientItem;\n","import clsx from \"clsx\";\nimport { useRouter } from \"next/router\";\nimport { KIOSK_VIEW_MODE_QUERY } from \"@Constants/url\";\nimport classes from \"./RecipesDetail.module.scss\";\n\n// regex pattern that checks if a string has at least two white spaces in a row or at least one tab character\nconst nonWfIngredientsRegex = /(\\s{2,}|\\t)/g;\ninterface NonWfIngredientProps {\n ingredient: string;\n}\n\nexport const NonWfIngredient = ({ ingredient }: NonWfIngredientProps) => {\n const {\n query: { viewMode },\n } = useRouter();\n\n if (!ingredient) {\n return <br />;\n }\n\n if (!ingredient.match(nonWfIngredientsRegex)) {\n return <p>{ingredient}</p>;\n }\n\n const index = ingredient.search(nonWfIngredientsRegex);\n const ingredientText = ingredient.slice(0, index);\n const quantity = ingredient.slice(index);\n\n return (\n <p\n className={clsx(\n classes[\"non-wf-ingredient\"],\n viewMode === KIOSK_VIEW_MODE_QUERY && classes.kiosk\n )}\n >\n <span>{ingredientText}</span>\n <span>{quantity.trim()}</span>\n </p>\n );\n};\n","import { BLOCKS } from \"@contentful/rich-text-types\";\nimport CmsTextEditorContent from \"@Libs/contentful/components/cms-text-editor/CmsTextEditor\";\nimport { NonWfIngredientsContent } from \"@Types/recipes-detail-page\";\nimport { NonWfIngredient } from \"./NonWfIngredient\";\nimport classes from \"./RecipesDetail.module.scss\";\n\nexport const NonWfIngredients = (props: NonWfIngredientsContent) => {\n if (!props?.nonWfIngredients?.json) {\n return null;\n }\n\n return (\n <div className={classes[\"ingredient-list__content\"]}>\n <CmsTextEditorContent\n content={props.nonWfIngredients}\n options={{\n renderNode: {\n [BLOCKS.PARAGRAPH]: (_node: any, children: any) => {\n return children.map((child: any, index: number) => {\n if (typeof child === \"string\") {\n const ingredients = child?.split(\"\\n\");\n\n return ingredients.map((ingredient, index) => (\n <NonWfIngredient key={index} ingredient={ingredient} />\n ));\n }\n\n return <p key={index}>{child}</p>;\n });\n },\n },\n renderText: (text: string) => text,\n }}\n />\n </div>\n );\n};\n","import { sortBy } from \"lodash\";\nimport { useTranslation } from \"next-i18next\";\nimport React, { useEffect, useState } from \"react\";\nimport { IngredientListContent } from \"@Types/recipes-detail-page\";\nimport IngredientItem from \"./IngredientItem\";\nimport { NonWfIngredients } from \"./NonWfIngredients\";\nimport classes from \"./RecipesDetail.module.scss\";\n\ninterface IngredientListProps extends IngredientListContent {}\n\nexport const IngredientList = (props: IngredientListProps) => {\n const { t } = useTranslation(\"common\");\n const [addToCartButtonTextForCA, setAddToCartButtonTextForCA] = useState(\"\");\n const [addToCartButtonClassForCA, setAddToCartButtonClassForCA] = useState(\n classes[\"button\"]\n );\n const {\n isCanadianUser,\n availability,\n isPickupAvailable,\n currentZipCodeAvialabilityStoreIdInStorageForCA,\n currentZipCodePickupAvailabilityForCA,\n } = props;\n\n useEffect(() => {\n if (!isCanadianUser) {\n setAddToCartButtonTextForCA(t(\"cart.buttons.add_to_cart\"));\n } else if (\n isCanadianUser &&\n !availability &&\n !isPickupAvailable &&\n currentZipCodeAvialabilityStoreIdInStorageForCA === \"false\" &&\n currentZipCodePickupAvailabilityForCA === \"false\"\n ) {\n setAddToCartButtonTextForCA(t(\"cart.buttons.change_to_shop\"));\n setAddToCartButtonClassForCA(classes[\"is_not_avilable--ca-only\"]);\n } else {\n setAddToCartButtonTextForCA(t(\"cart.buttons.add_to_cart\"));\n setAddToCartButtonClassForCA(classes[\"button\"]);\n }\n }, [\n isCanadianUser,\n availability,\n isPickupAvailable,\n currentZipCodeAvialabilityStoreIdInStorageForCA,\n currentZipCodePickupAvailabilityForCA,\n t,\n ]);\n\n const ingredients = sortBy(props.ingredientsList?.items, [\"isWfProduct\"]).map(\n (ingredient, index) => {\n return (\n <IngredientItem\n key={index}\n {...ingredient}\n addToBasketText={\n !isCanadianUser\n ? props[\"cart.addToBasket\"]\n : addToCartButtonTextForCA\n }\n addedText={\n !isCanadianUser ? props[\"cart.added\"] : addToCartButtonTextForCA\n }\n removeInCartText={\n !isCanadianUser ? props[\"cart.removeInCart\"] : props[\"cart.removed\"]\n }\n removedText={props[\"cart.removed\"]}\n isCanadianUser={isCanadianUser}\n addToCartButtonClassForCA={addToCartButtonClassForCA}\n availability={!!availability}\n isPickupAvailable={isPickupAvailable}\n currentZipCodeAvialabilityStoreIdInStorageForCA={\n currentZipCodeAvialabilityStoreIdInStorageForCA\n }\n currentZipCodePickupAvailabilityForCA={\n currentZipCodePickupAvailabilityForCA\n }\n />\n );\n }\n );\n\n return (\n <div className={classes[\"ingredient-list\"]}>\n <h2>{props[\"recipe.page.ingredients\"]}</h2>\n\n <ul>{ingredients}</ul>\n\n <NonWfIngredients {...props} />\n </div>\n );\n};\n","import { STORAGE_KEYS, STORAGE_TYPES } from \"@Constants/storage\";\nimport { IRecipesDetailPageContent } from \"@Types/recipes-detail-page\";\nimport { getItem } from \"@Utils/browserStorage\";\nimport { isCanadianLocale } from \"@Utils/locale\";\nimport { useAppSelector } from \"@wff/store/hooks\";\nimport { ZipCodeSelector } from \"@wff/store/zipcodeSlice\";\nimport { CookingDirections } from \"./CookingDirections\";\nimport { Header } from \"./Header\";\nimport { IngredientList } from \"./IngredientList\";\nimport classes from \"./RecipesDetail.module.scss\";\n\ninterface RecipesDetailLayoutProps extends IRecipesDetailPageContent {}\n\nexport const RecipesDetailLayout = (props: RecipesDetailLayoutProps) => {\n const { languageCode } = useAppSelector(({ locale }) => locale);\n const isCanadianUser = isCanadianLocale(languageCode);\n const { availability, isPickupAvailable } = useAppSelector(ZipCodeSelector);\n\n const currentZipCodeAvialabilityStoreIdInStorageForCA = getItem(\n STORAGE_KEYS.CUSTOMER_ZIP_AVAILABILITY_CA,\n STORAGE_TYPES.LOCAL\n );\n\n const currentZipCodePickupAvailabilityForCA = getItem(\n STORAGE_KEYS.CUSTOMER_ZIP_AVAILABILITY_CA,\n STORAGE_TYPES.LOCAL\n );\n\n //CA-ONLY\n if (isCanadianUser) {\n props = {\n ...props,\n isCanadianUser,\n availability,\n isPickupAvailable,\n currentZipCodeAvialabilityStoreIdInStorageForCA,\n currentZipCodePickupAvailabilityForCA,\n };\n }\n\n return (\n <div className={classes[\"recipes-detail-page\"]}>\n <Header {...props} />\n <section className={classes[\"recipe-section\"]}>\n <IngredientList {...props} />\n <div className={classes[\"divider\"]} />\n <CookingDirections {...props} />\n </section>\n </div>\n );\n};\n","import { GetStaticProps } from \"next\";\nimport { useRouter } from \"next/router\";\nimport RecipeKioskLayout from \"@Components/layout/RecipeKioskLayout\";\nimport { BackToRecipesButton } from \"@Components/recipes-detail/BackToRecipesButton\";\nimport { RecipesDetailLayout } from \"@Components/recipes-detail/RecipesDetailLayout\";\nimport { KIOSK_VIEW_MODE_QUERY } from \"@Constants/url\";\nimport CmsPage, { getCMSPageModel } from \"@Libs/contentful/components/CmsPage\";\nimport { RESOURCE_NAMES } from \"@Libs/contentful/constants\";\nimport { queryRecipesDetailsPaths } from \"@Libs/contentful/queries/ProductRecipeQuery\";\nimport productRecipeQuery from \"@Libs/contentful/queries/ProductRecipeQuery\";\nimport { makeStaticProps } from \"@Libs/i18n/getStatic\";\nimport { IRecipesDetailPageContent } from \"@Types/recipes-detail-page\";\nimport logger from \"@Utils/Logger\";\nimport { getStaticPathsFromSlug } from \"@Utils/contentful\";\n\ninterface RecipesDetailPageProps extends IRecipesDetailPageContent {\n pageModel: any;\n}\n\nconst RecipesDetailPage = ({ pageModel }: RecipesDetailPageProps) => {\n const {\n query: { viewMode },\n } = useRouter();\n const { pageContent = {} } = pageModel;\n\n // The kiosk in the O2O store view mode\n if (viewMode === KIOSK_VIEW_MODE_QUERY) {\n return (\n <RecipeKioskLayout\n pageModel={pageModel}\n pageTitle={pageContent.pageTitle}\n pageDescription={pageContent.pageDescription}\n rightHeaderContent={<BackToRecipesButton />}\n >\n <RecipesDetailLayout {...pageContent} />\n </RecipeKioskLayout>\n );\n }\n\n return (\n <CmsPage\n pageModel={pageModel}\n pageTitle={pageContent.pageTitle}\n pageDescription={pageContent.description}\n >\n <RecipesDetailLayout {...pageContent} />\n </CmsPage>\n );\n};\n\nexport async function getStaticPaths() {\n try {\n const paths = await getStaticPathsFromSlug(queryRecipesDetailsPaths);\n\n return {\n paths,\n fallback: false,\n };\n } catch (error) {\n logger.error(\"recipes/[slug] getStaticPaths()\", error);\n }\n}\n\nconst overrideStaticProps: GetStaticProps = async (props) => {\n const { locale, slug } = props as { locale: string; slug: string };\n\n const pageModel = await getCMSPageModel(\n productRecipeQuery,\n {\n locale,\n slug,\n resourceName: RESOURCE_NAMES.recipesDetailPage,\n },\n {\n keepOriginalSlug: true,\n }\n );\n\n return {\n props: {\n pageModel,\n },\n };\n};\n\nconst getStaticProps = makeStaticProps([\"common\"], overrideStaticProps);\nexport { getStaticProps };\n\nexport default RecipesDetailPage;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"RecipeKioskLayout_root__sKFiN\",\"wrapper\":\"RecipeKioskLayout_wrapper__QS0kk\",\"header\":\"RecipeKioskLayout_header__hHKtb\",\"nav\":\"RecipeKioskLayout_nav__WvAWf\",\"logo\":\"RecipeKioskLayout_logo__Vt6BN\",\"footer\":\"RecipeKioskLayout_footer__FAdkD\",\"copyright\":\"RecipeKioskLayout_copyright__V93Kl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"recipes-detail-page\":\"RecipesDetail_recipes-detail-page__9ngui\",\"main-content\":\"RecipesDetail_main-content__J4HVn\",\"main-content__header\":\"RecipesDetail_main-content__header__VrxDB\",\"list\":\"RecipesDetail_list__9dSIn\",\"icon\":\"RecipesDetail_icon__idpkG\",\"main-content__gallery\":\"RecipesDetail_main-content__gallery__Tow9Z\",\"recipe-section\":\"RecipesDetail_recipe-section__gNyQa\",\"divider\":\"RecipesDetail_divider__ZAF2A\",\"ingredient-list\":\"RecipesDetail_ingredient-list__8qC03\",\"cooking-directions\":\"RecipesDetail_cooking-directions__n6HXJ\",\"ingredient-list__content\":\"RecipesDetail_ingredient-list__content__CHuEi\",\"non-wf-ingredient\":\"RecipesDetail_non-wf-ingredient__B8jU7\",\"kiosk\":\"RecipesDetail_kiosk__4Vout\",\"ingredient-item\":\"RecipesDetail_ingredient-item__o2oBd\",\"is_in_cart\":\"RecipesDetail_is_in_cart__1ZmZl\",\"button-wrapper\":\"RecipesDetail_button-wrapper__5HzJT\",\"tooltip\":\"RecipesDetail_tooltip__d7KGG\",\"is_in_cart_btn\":\"RecipesDetail_is_in_cart_btn__Ae0sn\",\"is_not_avilable--ca-only\":\"RecipesDetail_is_not_avilable--ca-only__BChMn\",\"direction-item\":\"RecipesDetail_direction-item___rnDn\",\"question-bullet\":\"RecipesDetail_question-bullet__tGcMy\",\"indicator\":\"RecipesDetail_indicator__RUhmM\",\"active\":\"RecipesDetail_active__VZc2L\",\"backButton\":\"RecipesDetail_backButton__c8c8_\",\"arrowLeftIcon\":\"RecipesDetail_arrowLeftIcon__iMJET\"};"],"names":["window","__NEXT_P","push","pageModel","children","pageTitle","rightHeaderContent","pageDescription","headTitleTail","titleTail","mainClass","languageCode","useAppSelector","localeSelector","siteLogoURL","siteGlobal","header","siteLogo","url","copyRightsContent","footer","MetaHead","headTitle","headDescription","div","className","classes","id","LinkComponent","href","KIOSK_VIEW_MODE_QUERY","a","Image","alt","layout","src","objectFit","main","section","useBreadcrumb","props","homeSlug","collectionSlug","currentSlug","dispatch","useAppDispatch","useEffect","setHomeSlug","setCollectionSlug","setCurrentSlug","TextEditor","dynamic","Banner","HomePageHeroSlider","HeroSlider","UserFeedback","UserReviews","SalesPropositions","CarouselProductList","Educational","KnowYourCuts","StoriesOfWildfork","MediaImage","RichTextContent","MembershipTable","MediaEmbedYoutubeVideo","SectionTitleIconDescription","SectionTextImage","SectionDivider","query","payload","options","locale","slug","keepOriginalSlug","slugStr","country","reqPayload","split","toLocaleLowerCase","logger","getCmsPageBySlug","templates","Comp","productSKU","contents","pageContent","items","length","map","content","index","contentKey","content_type","componentMapping","title","homeSlugLabel","link","AppLayout","BackToRecipesButton","viewMode","useRouter","backLink","button","Icon","iconName","CookingDirections","renderingOptions","renderNode","BLOCKS","_node","DirectionItem","h2","CmsTextEditorContent","cookingdirections","li","clsx","Carousel","imageList","carouselRef","useRef","Slide","autoplay","arrows","indicators","activeIndex","current","state","ref","transitionDuration","image","width","height","nextAppEnv","Header","linkWithoutViewModeQuery","whereAmI","recipeBanner","h1","span","ul","prepTime","cookTime","QRCodeSVG","value","description","projectKey","scopes","authMiddlewareOptions","host","credentials","clientId","clientSecret","fetch","httpMiddlewareOptions","ctpClient","ClientBuilder","withProjectKey","withClientCredentialsFlow","withHttpMiddleware","build","callCTP","createApiBuilderFromCtpClient","getCtData","sku","res","get","queryArgs","localeProjection","where","expand","execute","body","results","getCtAllProducts","offset","response","products","nextProducts","limit","CT_PRODUCT_LIMIT","count","lang","itemsArr","tooltipData","tempArr","j","ctproductSku","ctData","getItemData","ctProductSku","recipeItemToCTItemTransformer","product","isWfProduct","WithLink","ingredient","useState","setIngredient","cartSliceSelector","lineItems","cartId","currentLocale","itemIndex","findIndex","item","getItemQty","itemQuantity","setItemQuantity","isInCart","setIsInCart","setSlug","isLoading","setIsLoading","isEventTriggered","setIsEventTriggered","attribs","masterData","masterVariant","attributes","priceData","prices","weight","getWeightValue","totalPrice","currency","getPriceOrDiscounted","removeInCartTextWithQuantity","removeInCartText","join","handleRemoveItemPayload","isCanadianUser","currentZipCodeAvialabilityStoreIdInStorageForCA","addToCartButtonClassForCA","availability","isPickupAvailable","currentZipCodePickupAvailabilityForCA","incrementalQtyPayload","callback","tooltipPosition","itemInCartClass","dynamicBtnClass","isKioskViewMode","router","getData","then","newQty","timeoutId","document","addEventListener","setTimeout","back","TIME_TO_REDIRECT_BACK_FROM_PDP_TO_PLP_RECIPES","clearTimeout","removeEventListener","undefined","p","ingredientQuantity","Button","data-tip","data-for","disabled","onClick","ReactTooltip","setItem","STORAGE_KEYS","JSON","stringify","STORAGE_TYPES","toggleZipCodePopUp","cartUtilQtyAdd","addedText","addToBasketText","place","type","effect","top","left","arrowColor","cartUtilRemoveItem","removedText","nonWfIngredientsRegex","NonWfIngredient","br","match","search","ingredientText","slice","quantity","trim","NonWfIngredients","nonWfIngredients","json","child","renderText","text","IngredientList","t","useTranslation","addToCartButtonTextForCA","setAddToCartButtonTextForCA","setAddToCartButtonClassForCA","ingredients","sortBy","ingredientsList","IngredientItem","RecipesDetailLayout","isCanadianLocale","ZipCodeSelector","getItem","RecipeKioskLayout","CmsPage","module","exports"],"sourceRoot":""}